class copy {
  /**
   * 浅拷贝
   * @param obj 一个对象
   * @returns 对 obj 浅拷贝的结果
   */
  static shallowCopy(obj: any) {
    // 检查输入是否是一个对象
    if (typeof obj !== 'object') return obj;
    // 使用与输入对象相同的原型创建一个新对象
    const newObj = Object.create(obj.__proto__);
    // 将输入对象的所有属性复制到新对象中
    for (let key in obj) {
      newObj[key] = obj[key];
    }
    return newObj;
  }

  /**
   * 深拷贝
   * - 递归复制嵌套对象实现
   * @param obj 一个对象
   * @returns 对 obj 深拷贝的结果
   */
  static deepCopy(obj: any) {
    // 检查输入是否是一个对象
    if (typeof obj !== 'object') return obj;
    // 使用与输入对象相同的原型创建一个新对象
    const newObj = Object.create(obj.__proto__);
    // 将输入对象的所有属性复制到新对象中
    for (let key in obj) {
      // 递归复制嵌套对象
      newObj[key] = copy.deepCopy(obj[key]);
    }
    return newObj;
  }

  /**
   * 深拷贝
   * - 使用JSON序列化和反序列化实现
   * @param obj 
   */
  static serializeCopy<T>(obj: T): T {
    return JSON.parse(JSON.stringify(obj));
  }
}

export {
  copy
}